package com.zoweunion.mechanic.dao.base;

import com.zoweunion.mechanic.model.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

@Component
public interface UserDao {

	/**
	 * 登录验证
	 * 查询id,用户名,密码
	 */
	public Map<String, String> getUser(Map<String, String> reqMap);
	/**
	 * 登录验证
	 * 查询id,用户名,密码
	 */
	public Map<String, Object> getUserById(@Param("id") String id);


	/**
	 * 查询用户具体信息及相应角色
	 */
	public Map<String, Object> getUserInfo(Map<String, String> reqMap);


	/**
	 * 根据id查询用户具体信息及相应角色
	 */
	Map<String, Object> getUserInfoById(@Param("userId") String userId);

	/**
	 * 根据id查询用户具体信息及相应角色
	 */
	Map<String, Object> getCarMasterInfoById(@Param("userId") String userId);


	/**
	 * 根据用户名查询用户个数
	 * @param account
	 * @return
	 */
	public int countUserByAccount(String account);

	/**
	 * 添加用户
	 * @param reqMap
	 * @return
	 */
	public int insertUser(Map<String, Object> reqMap);


	/**
	 *根据用户名查询相应的权限数据
	 */
	public List<String> getPermissionsByAccount(String account);


	/**
	 * 更新用户
	 */
	public int updateUser(Map<String, Object> userInfo);

	/**
	 * 更新用户的服务商
	 */
	int updateUserSid(Map<String, Object> userInfo);

	/**
	 * 根据服务商id和角色id 查询用户数量
	 * @param reqMap
	 * @return
	 */
	public int getAllUserByCount(Map<String, Object> reqMap);

	/**
	 * 根据服务商id和角色id 查询用户列表分页
	 * @param reqMap
	 * @return
	 */
	public List<Map<String, Object>> getAllUserByPage(Map<String, Object> reqMap);

	/**
	 * 根据服务商id和角色类型查询用户列表
	 * @param reqMap
	 * @return
	 */
	public List<Map<String, Object>> getUserByRole(Map<String, Object> reqMap);

	/**
	 * 根据服务商id服务商信息
	 * @param reqMap s_id
	 * @return
	 */
	public Map<String, Object> getServerInfoBySId(Map<String, Object> reqMap);


	public List<Map<String, Object>> getUserWithAuth();


	public Map<String, Object> getAuthInfo(@Param("user_account") String user_account);

	int unbindWxOrAlipay(Map<String, Object> reqMap);

	int bindWxOrAlipay(Map<String, Object> reqMap);

	/**
	 * 更新用户积分值
	 * @param userId
	 * @param integration
	 * @return
	 */
	int updateIntegration(@Param("userId") String userId, @Param("integration") int integration);

	/**
	 * 获取我的发布数量和我的收藏数量
	 * @param userId
	 * @return
	 */
	Map getMyCollectionAndPublishTotal(@Param("userId") String userId);

	/**
	 * 修改密码
	 * @param reqMap
	 */
	void updatePassword(Map reqMap);

	/**
	 * 修改密码的记录
	 * @param reqMap
	 */
	void recordUserPassword(Map reqMap);

	/**
	 * 获取服务商的高管和管理员的账号信息
	 */
	List<User> getUserInfoOfServerAdminBySid(@Param("s_id") String sId);

	/**
	 * 根据服务商ID获取所有非车主司机用户信息
	 * @param sId
	 * @return
	 */
	List<User> getAllUserBySid(@Param("s_id") String sId);

	/**
	 * 获取有工单的所有服务商
	 * @return
	 */
	List<Map<String, Object>> getAllServerHasOrder();

	/**
	 * 获取有车辆的所有服务商
	 * @return
	 */
	List<Map<String, Object>> getAllServerHasCar();

	/**
	 * 获取此用户发布的新机数量
	 * @param id
	 * @return
	 */
	int getThisUserPublishNewCount(@Param("id") String id,@Param("type") int type);

	/**
	 * 获取同一个服务商下的所有新机数量
	 * @param s_id
	 * @return
	 */
	int getServerNewCount(@Param("s_id") String s_id,@Param("type") int type);

    List<Map<String, Object>> getUserByArea(@Param("area")String area,@Param("sid")String sid);

	/**
	 * 根据主机厂的id和省市的number查询服务商列表(主机厂下面的子服务商)
	 * @param paraMap
	 * @return
	 */
	List<Map<String, Object>> getServerByArea(Map<String, Object> paraMap);

	/**
	 * 注销账号
	 * @param reqMap
	 * @return
	 */
    void logout(Map reqMap);

	/**
	 * 查询注销是否成功，delete_flag == 1?
	 * @param reqMap
	 * @return
	 */
	Integer selectDelete(Map reqMap);

	Integer selectMobileIsExist(Map reqMap);

	/**
	 * 账户名(手机号)是否存在
	 * @param userAccount
	 * @return
	 */
	int existUserInfoForWX(String userAccount);

	/**
	 * 微信小程序等第三方分发注册服务商下的车主
	 * @param reqMap
	 * @return
	 */
	int insertCarOwnerUserForWX(Map<String, Object> reqMap);

	/**
	 * 微信小程序等第三方分发注册游客用户
	 * @param reqMap
	 * @return
	 */
	int insertYKUserForWX(Map<String, Object> reqMap);

	List<Map<String, Object>> getExamineUserList(Map reqMap);

	void approveExamineUser(Map reqMap);

	void refuseExamineUser(Map reqMap);

	/**
	 * 根据用户的UserAccount获取MD5加密过后的密码
	 */
	String getPasswordByUserAccount(Map<String, Object> reqMap);

	/**
	 * 获取最新该角色类型的用户编号
	 */
	String getLatestUserNoByRoleId(String roleId);
}
